package Java集合面试题;

import java.util.*;

/**
 * 项目名称：Demo01
 * 类 名 称：HashMapExam
 * 类 描 述：TODO
 * 创建时间：2021/03/15 19:23
 * 创 建 人：XiaoCoder
 */
public class HashMapExam {

    /*
        已知一个 HashMap<Integer，User>集合，User 有name（String）和 age（int）属性。请写一个方法实现对HashMap 的排序功能，该方法接收 HashMap<Integer，User>为形参，返回类型为 HashMap<Integer，User>，要求对 HashMap中的 Userage倒序进行排序。排序时 key = value键值对不得拆散。
    */
    public static void main(String[] args) {
        HashMap<Integer,UserEntity> users = new HashMap<>();
        users.put(1,new UserEntity("张三",15));
        users.put(2,new UserEntity("张三",18));
        users.put(3,new UserEntity("张三",17));
        System.out.println(users);
        HashMap<Integer,UserEntity> sortHashMap = sortHashMap(users);
        System.out.println(sortHashMap);
    }

    private static HashMap<Integer, UserEntity> sortHashMap(HashMap<Integer, UserEntity> map) {
        //拿到map中的键值对
        Set<Map.Entry<Integer, UserEntity>> entries = map.entrySet();
        //将 set 集合转换成为 list 集合，为了使用工具类的排序方法
        List<Map.Entry<Integer,UserEntity>> list = new ArrayList<Map.Entry<Integer, UserEntity>>(entries);
        //使用Collections 集合工具类对 list 进行排序，排序规则使用匿名内部类来实现
        Collections.sort(list, new Comparator<Map.Entry<Integer, UserEntity>>() {
            @Override
            public int compare(Map.Entry<Integer, UserEntity> o1, Map.Entry<Integer, UserEntity> o2) {
                return o2.getValue().getAge() - o1.getValue().getAge();
            }
        });
        //创建一个有序的 HashMap 子类集合
        LinkedHashMap<Integer, UserEntity> linkedHashMap = new LinkedHashMap<>();
        for (Map.Entry<Integer, UserEntity> entry : list) {
            linkedHashMap.put(entry.getKey(),entry.getValue());
        }
        return  linkedHashMap;
    }
}
